#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QUdpSocket>
#include <QNetworkInterface>
#include <QDateTime>
#include <QFile>
#include <QFileDialog>

#include "qdom.h"

#include "filesrvdlg.h"

//class FileSrvDlg;

enum ChatMsgType {ChatMsg, OnLine, OffLine, SfileName, RefFile};

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    /// @brief 初始化窗口
    void initMainWindow();

    /// @brief 新用户上线
    /// @param name 
    /// @param time 
    void onLine(QString name, QString time);

    /// @brief 用户离线
    /// @param name 
    /// @param time 
    void offLine(QString name, QString time);

    /// @brief 发送 消息
    /// @param msgType 
    /// @param rmtName 
    void sendChatMsg(ChatMsgType msgType, QString rmtName = "");

    /// @brief 获取本端的IP地址
    /// @return 
    QString getLocHostIp();

    /// @brief 获取本端的聊天信息内容
    /// @return 
    QString getLocChatMsg();

    void recvFileName(QString name, QString hostip, QString rmtname, QString filename);

protected:

    /// @brief 重写关闭窗口方法以便发送离线通知
    /// @param event 
    void closeEvent(QCloseEvent *event);

private slots:

    /// @brief 发送按钮点击信号
    void on_sendPushButton_clicked();

    /// @brief 接收并处理udp数据
    void recvAndProcessChatMsg();

    /// @brief 搜索线上所有用户
    void on_searchPushButton_clicked();

    /// @brief 获取文件名/路径？
    void getSfileName(QString);

    /// @brief 传输按钮点击信号
    void on_transPushButton_clicked();

private:
    Ui::MainWindow *ui;

    /// @brief 本端当前的用户名
    QString myname = "";

    /// @brief UDP套接字指针
    QUdpSocket *myUdpSocket;

    /// @brief udp端口号
    qint16 myUdpPort;

    QDomDocument myDoc;

    QString myFileName;

    FileSrvDlg *myfsrv;
};

#endif // MAINWINDOW_H
